package net.atomarrow.configs;

import net.atomarrow.db.orm.IDomainControl;
import net.atomarrow.db.pool.IDataSource;
import net.atomarrow.ioc.ApplicationContext;

import java.util.List;



/**
 * 全局配置
 * @author Michael
 *
 */
public abstract class Config {


	public static Config getConfig(){
		return ApplicationContext.get(Config.class);
	}


    /**
     * 设置框架接管的请求路径
     * @return
     */
	public String configFilterMapping() {
	    return "/*";
    }

//	/**
//	 * 是否开启热部署，需要配合jrebel
//	 * @return
//	 */
//	public boolean configHotDeploy(){
//		return false;
//	}
	
    /**
     * 配置是否是开发模式
     * @return
     */
    public abstract boolean configDevMode();

    /**
     * 是否打印service log
     * @return
     */
    public abstract boolean configServiceLog();
    
    /**
     * 是否打印启动 log
     * @return
     */
    public boolean configStartLog(){
    	return true;
    }


    /**
     * 配置事务前缀
     * @return
     */
    public abstract List<String> configTxPrefix();
    
    
    /**
     * 配置数据库连接池
     * @return
     */
    public abstract IDataSource configDbPool();
    
    /**
     * 配置数据库名称
     * @return
     */
    public abstract String configDbName();
    
    /**
     * 配置数据库类型
     * DbConfig.DB_TYPE_
     * @return
     */
    public abstract String configDbType();
    /**
     * 配置上传文件路径
     * @return
     */
    public abstract String configUploadPath();
    /**
     * 配置上传文件最大尺寸
     * @return
     */
    public abstract int configUploadMaxSize();
    /**
     * 配置上传文件不允许的后缀名
     * @return
     */
    public abstract List<String> configUploadExcludeSuffixs();
    /**
     * 配置ormBean
     */
    public abstract void configOrmBean();
    /**
     * 配置domainControl
     */
    public IDomainControl configDomainControl(){
    	return null;
    }

//    /**
//     * 配置是否开启防XSS攻击
//     * @return
//     */
//    public  boolean configPreventXss() {
//        return true;
//    }
//
//    /**
//     * 配置不检测XSS攻击的白名单
//     * @return
//     */
//    public String[] configXssWhiteList() {
//        return null;
//    }

}
